package bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputText;

import mensagem.MsgFuncionario;
import session.SessionCidade;
import session.SessionCargo;
import session.SessionFuncionario;
import entity.Cidade;
import entity.Cargo;
import entity.Funcionario;

@ManagedBean
@SessionScoped
public class BeanFuncionario {

	private Funcionario funcionario = new Funcionario();

	private Funcionario filtro = new Funcionario();

	private List<Funcionario> funcionarios = new ArrayList<Funcionario>();

	private SessionFuncionario session = new SessionFuncionario();

	private HtmlInputText nomeCidade;

	private HtmlInputText cargo;

	private SessionCidade sessionC = new SessionCidade();

	private SessionCargo sessionCargo = new SessionCargo();

	private String inicia;

	private String[] estados;

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public BeanFuncionario() {
		estados = new String[27];
		estados[0] = "AC";
		estados[1] = "AL";
		estados[2] = "AM";
		estados[3] = "AP";
		estados[4] = "BA";
		estados[5] = "CE";
		estados[6] = "DF";
		estados[7] = "ES";
		estados[8] = "GO";
		estados[9] = "MA";
		estados[10] = "MG";
		estados[11] = "MS";
		estados[12] = "MT";
		estados[13] = "PA";
		estados[14] = "PB";
		estados[15] = "PE";
		estados[16] = "PI";
		estados[17] = "PR";
		estados[18] = "RJ";
		estados[19] = "RN";
		estados[20] = "RO";
		estados[21] = "RR";
		estados[22] = "RS";
		estados[23] = "SC";
		estados[24] = "SE";
		estados[25] = "SP";
		estados[26] = "TO";
	}

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public String getInicia() {
		this.reinit();
		return inicia;
	}

	public void setInicia(String inicia) {
		this.inicia = inicia;
	}

	public SessionCargo getSessionCargo() {
		return sessionCargo;
	}

	public void setSessionCargo(SessionCargo sessionCargo) {
		this.sessionCargo = sessionCargo;
	}

	public String[] getEstados() {
		return estados;
	}

	public void setEstados(String[] estados) {
		this.estados = estados;
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public List<Funcionario> getFuncionarios() {
		return funcionarios;
	}

	public Funcionario getFiltro() {
		return filtro;
	}

	public void setFiltro(Funcionario filtro) {
		this.filtro = filtro;
	}

	public SessionFuncionario getSession() {
		return session;
	}

	public void setSession(SessionFuncionario session) {
		this.session = session;
	}

	public HtmlInputText getNomeCidade() {
		return nomeCidade;
	}

	public void setNomeCidade(HtmlInputText nomeCidade) {
		this.nomeCidade = nomeCidade;
	}

	public HtmlInputText getCargo() {
		return cargo;
	}

	public void setCargo(HtmlInputText cargo) {
		this.cargo = cargo;
	}

	public SessionCidade getSessionC() {
		return sessionC;
	}

	public void setSessionC(SessionCidade sessionC) {
		this.sessionC = sessionC;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public void setFuncionarios(List<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}

	// ///////////////////////////////METODOS/////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public void reinit() {
		this.funcionario = new Funcionario();
		this.filtro = new Funcionario();
		this.nomeCidade.setValue("");

	}

	public String save() throws Exception {
		if (this.funcionario.getId() != null) {
			return this.update();
		} else {
			if (this.session.save(this.funcionario)) {
				this.reinit();
				MsgFuncionario.msgSave();
			}
		}
		return "";
	}

	public String update() throws Exception {
		if (this.session.update(this.funcionario)) {
			this.reinit();
			MsgFuncionario.msgUpdate();
		}
		return null;
	}

	public String remove() {
		try {
			this.session.remove(funcionario);
			MsgFuncionario.msgRemove();
		} catch (Exception e) {
			MsgFuncionario.msgNotRemove();
		}
		return null;
	}

	public void find() throws Exception {
		this.funcionarios = this.session.getController().findList(filtro);
	}

	public String hotFindCidade() {
		if (this.funcionario.getCidade() != null) {
			if ((this.funcionario.getCidade().getId() != null)
					&& (this.funcionario.getCidade().getCidade() != null)) {
				int aux = this.funcionario.getCidade().getId();
				this.funcionario.setCidade(new Cidade());
				this.funcionario.getCidade().setId(aux);
			}
		}

		if ((this.funcionario.getCidade() != null)
				&& (this.funcionario.getCidade().getId() != null)) {
			try {
				this.funcionario.setCidade(this.sessionC.getController().find(
						this.funcionario.getCidade()));
			} catch (Exception e) {
				this.funcionario.setCidade(new Cidade());
			}
			if ((this.funcionario.getCidade() != null)
					&& (funcionario.getCidade().getCidade() != null)) {
				this.nomeCidade.setValue(funcionario.getCidade().getCidade());
				return null;
			}
		}
		this.funcionario.setCidade(new Cidade());
		return null;
	}

	public String hotFindCargo() {
		if (this.funcionario.getCargo() != null) {
			if ((this.funcionario.getCargo().getId() != null)
					&& (this.funcionario.getCargo().getDescricao() != null)) {
				int aux = this.funcionario.getCargo().getId();
				this.funcionario.setCargo(new Cargo());
				this.funcionario.getCargo().setId(aux);
			}
		}

		if ((this.funcionario.getCargo() != null)
				&& (this.funcionario.getCargo().getId() != null)) {
			try {
				this.funcionario.setCargo(this.sessionCargo.getController()
						.find(this.funcionario.getCargo()));
			} catch (Exception e) {
				this.funcionario.setCargo(new Cargo());
			}
			if ((this.funcionario.getCargo() != null)
					&& (this.funcionario.getCargo().getDescricao() != null)) {
				this.cargo.setValue(this.funcionario.getCargo().getDescricao());
				return null;
			}
		}
		this.funcionario.setCargo(new Cargo());
		return null;
	}
}
